SHIELD Mail 프록시 설정 가이드
문서 버전: 1.0
작성일: 2025-10-27
대상: 구축팀, 온프레미스 운영자
개요
SHIELD Mail은 아웃바운드 트래픽을 프록시를 통해 관리할 수 있습니다. 이 문서는 온프레미스 환경에서 프록시 설정을 위한 빠른 시작 가이드입니다.
프록시 사용 목적
- 모든 외부 통신이 중앙 집중식 프록시를 통함
- 내부 서비스 통신은 직접 연결로 최적화
- 네트워크 정책 및 보안 감시 중앙화
- 엔터프라이즈 프록시 요구사항 충족
빠른 설정 (3단계)
1단계: Squid 프록시 배포
# 1. Squid 프록시 배포
kubectl apply -f build/squid-proxy-deploy.yaml
# 2. 배포 확인
kubectl get pod -n dev -l app=squid-proxy
# 예상 결과: squid-proxy-XXXXX 1/1 Running
주요 리소스:
- Deployment: squid-proxy (1 replica)
- Service: squid-proxy (Port 3128)
- ConfigMap: squid-config (프록시 설정)
2단계: SHIELD Mail 프록시 설정
build/kube-deploy.yaml의 ConfigMap에 다음 환경변수를 추가합니다:
apiVersion: v1
kind: ConfigMap
metadata:
name: shieldmail-config
namespace: dev
data:
# Go 컨테이너 프록시 설정
HTTP_PROXY: "http://squid-proxy.dev.svc.cluster.local:3128"
HTTPS_PROXY: "http://squid-proxy.dev.svc.cluster.local:3128"
# 프록시 예외 목록 (클러스터 내부 통신은 프록시 우회)
NO_PROXY: "localhost,127.0.0.1,.svc.cluster.local,.cluster.local,10.42.0.0/16,10.43.0.0/16,redis-sentinel-ha-headless.dev.svc.cluster.local,security365-rabbitmq-headless.dev.svc.cluster.local,elasticsearch-cluster-data.elasticsearch.svc.cluster.local"
# JVM 컨테이너 프록시 설정
JAVA_TOOL_OPTIONS: "-Dhttp.proxyHost=squid-proxy.dev.svc.cluster.local -Dhttp.proxyPort=3128 -Dhttps.proxyHost=squid-proxy.dev.svc.cluster.local -Dhttps.proxyPort=3128 -Dhttp.nonProxyHosts=localhost|127.0.0.1|*.svc.cluster.local|*.cluster.local|10.42.0.0/16"
💡 프록시 주소 변경:
HTTP_PROXY,HTTPS_PROXY값을 실제 프록시 주소로 변경하세요.
3단계: 배포 및 검증
# 설정 적용
kubectl apply -f build/kube-deploy.yaml
# Pod 상태 확인
kubectl get pods -n dev -l app=shieldmail
# 예상 결과: shieldmail-0 3/3 Running
# 프록시 검증 로그 확인
kubectl logs -n dev shieldmail-0 -c shieldmail | grep proxy
프록시 동작 원리
외부 통신 (프록시 경유)
SHIELD Mail → HTTP_PROXY 확인
→ Squid Proxy (3128 포트)
→ 외부 서비스
대상:
- 인터넷 API 호출
- 클라우드 서비스 호출
내부 통신 (프록시 우회)
SHIELD Mail → NO_PROXY 확인
→ 프록시 미사용
→ 클러스터 내부 서비스 직접 연결
대상:
- Redis 캐시
- RabbitMQ 메시지 큐
- Elasticsearch
- 클러스터 내부 서비스 (
*.svc.cluster.local)
SMTP 통신
중요: SMTP는 HTTP가 아니므로 프록시 설정과 무관합니다.
- 메일 전송(25 포트)은 프록시 없이 직접 연결
- 방화벽에서 SMTP(25 포트) 아웃바운드 별도 허용 필요
주요 설정 항목
Go 컨테이너 (shieldmail)
| 환경변수 | 설명 | 예시 |
|---|---|---|
HTTP_PROXY | HTTP 프록시 주소 | http://squid-proxy:3128 |
HTTPS_PROXY | HTTPS 프록시 주소 | http://squid-proxy:3128 |
NO_PROXY | 프록시 우회 대상 | localhost,.svc.cluster.local |
프록시 인증이 필요한 경우:
HTTP_PROXY: "http://username:password@proxy.example.com:3128"
HTTPS_PROXY: "http://username:password@proxy.example.com:3128"
JVM 컨테이너 (shieldmail-pep, cloud-containerlinker)
| 환경변수 | 설명 | 예시 |
|---|---|---|
JAVA_TOOL_OPTIONS | Java 시스템 프로퍼티 | -Dhttp.proxyHost=... |
프록시 인증이 필요한 경우:
JAVA_TOOL_OPTIONS: "-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password ..."
자동 프록시 검증
중요: 각 서비스는 시작 시 프록시 환경변수가 설정된 경우 자동으로 프록시 연결을 검증합니다.
- Go 컨테이너: HTTP_PROXY 설정 시 자동 프록시 테스트 실행
- JVM 컨테이너: -Dhttp.proxyHost 설정 시 자동 프록시 테스트 실행
- 로그에서 "proxy validation" 검색하여 결과 확인
검증 방법
1. 환경변수 확인
# Go 컨테이너
kubectl exec -n dev shieldmail-0 -c shieldmail -- env | grep -i proxy
# JVM 컨테이너
kubectl exec -n dev shieldmail-0 -c shieldmail-pep -- env | grep JAVA_TOOL_OPTIONS
2. 프록시 연결 테스트
# Squid 포트 접근 확인
kubectl exec -n dev shieldmail-0 -c shieldmail -- nc -zv squid-proxy.dev.svc.cluster.local 3128
3. 프록시 동작 확인
# 프록시 경유 로그 확인
kubectl logs -n dev shieldmail-0 -c shieldmail | grep -i "via header"
# 예상 결과
# Proxy validation - Via header: 1.1 squid-proxy-xxx
트러블슈팅
문제: 프록시 연결 실패
증상:
Failed to connect to proxy
해결:
- Squid Pod 상태 확인:
kubectl get pod -n dev -l app=squid-proxy - 프록시 포트 접근 확인:
nc -zv squid-proxy 3128 - 환경변수 확인:
env | grep HTTP_PROXY
문제: SMTP 전송 실패
증상:
Connection timeout to mail.example.com:25
원인:
- SMTP는 프록시를 사용하지 않는 raw TCP 연결
- 네트워크 방화벽에서 25 포트 아웃바운드 차단 가능성
해결:
- Azure NSG / 네트워크 방화벽에서 SMTP(25) 아웃바운드 허용
- DNS 서버 정상 동작 확인
문제: JVM 컨테이너 /tmp 오류
증상:
Read-only file system: /tmp
해결: StatefulSet의 볼륨 마운트 확 인:
volumeMounts:
- name: tmp
mountPath: /tmp
체크리스트
배포 전 확인 사항:
- Squid 프록시 배포 완료 (1/1 Running)
- ConfigMap에 프록시 환경변수 추가
- NO_PROXY에 내부 서비스 포함
- 네트워크 방화벽에서 SMTP(25) 아웃바운드 허용
- SHIELD Mail Pod 재배포
- 프록시 검증 로그 확인
- 외부 API 호출 정상 동작 확인
상세 문서
더 자세한 내용이 필요하신가요?
- 프록시 검증 상세 절차: 02. 프록시 상세 설정 및 검증.md
- 운영 및 모니터링: 02. 프록시 상세 설정 및 검증.md
- 고급 트러블슈팅: 02. 프록시 상세 설정 및 검증.md
문서 버전: 1.0
최종 수정일: 2025-10-27